package com.rem.jedis.service.impl;

import com.rem.jedis.config.JedisConfig;
import com.rem.jedis.config.JedisUtil;
import com.rem.jedis.pojo.User;
import com.rem.jedis.service.UserService;
import lombok.extern.java.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author Rem
 * @Date 2020-05-14
 */

@Service
@Log
public class UserServiceImpl implements UserService {


    @Autowired
    private JedisConfig jedisConfig;

    @Autowired
    private JedisUtil jedisUtil;


    /**
     * 先判断redis中有没有数据
     * 存在从redis查询返回
     * 没有 从mysql中取出 存入redis
     * 返回数据
     *
     * @param key
     * @return
     */
    @Override
    public String getString(String key) {
        //1.得到连接
        JedisPool jedisPool = jedisConfig.jedisPool();
        Jedis jedis = jedisPool.getResource();

        //2.获取数据连接
        String val;
        if (jedis.exists(key)) {
            val = jedis.get(key);
            log.info("查询到redis中有数据:" + val);
        } else {
            //没有从redis中查询到  直接去数据库中查找
            val = "jack";
            log.info("模拟数据库数据" + val);
            jedis.set(key, val);
        }

        //3.关闭连接
        jedis.close();
        return val;
    }

    @Override
    public void expireStr(String key, String value) {
        jedisUtil.set(key, value);
        Long expire = jedisUtil.expire(key, 68);
        log.info("对" + key + "设置68秒");
        jedisUtil.close();
    }


    /**
     * 从redis中取出数据
     * 1.先判断redis中有没有key
     * 2.有key值 直接从redis中取出数据
     * 3.没有key值，从数据库中查询数据，并且将数据存入redis中
     * 4.返回数据
     *
     * @param id
     * @return
     */
    @Override
    public User selectById(Long id) {
        String key = "user:" + id;

        User user = new User();

        if (jedisUtil.exists(key)) {

            Map<String, String> map = jedisUtil.hgetall(key);

            user.setId(Long.parseLong(map.get("id")));
            user.setAge(Integer.parseInt(map.get("age")));
            user.setName(map.get("name"));
            log.info("从redis中取出数据~~");
        } else {
            user.setId(3L);
            user.setAge(30);
            user.setName("zhuli");

            Map<String, String> map = new HashMap<>();
            map.put("id", user.getId().toString());
            map.put("age", user.getAge().toString());
            map.put("name", user.getName());
            jedisUtil.hmset(key, map);
            log.info("从数据库中取出数据~~");
        }

        return user;

    }


}
